package es.project.sien7e.main.services;

import java.sql.SQLException;
import java.util.List;

import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.validation.Valid;

import org.springframework.stereotype.Service;

import es.project.sien7e.main.PMF;
import es.project.sien7e.main.model.Usuario;

@Service
public class UsuarioServiceImpl implements UsuarioService {

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> getUsuarios() throws SQLException {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Query query = pm.newQuery(Usuario.class);
		query.setOrdering("login asc,id asc");
		return (List<Usuario>) query.execute();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> getListaUsuarios() throws SQLException {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Query query = pm.newQuery(Usuario.class);
		query.setOrdering("id asc");
		return (List<Usuario>) query.execute();
	}

	@SuppressWarnings("unchecked")
	@Override
	public Usuario compruebaUsuario(Usuario usuario) throws SQLException {
		Usuario resultado = null;
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Query query = pm.newQuery(Usuario.class);
		query.setFilter("login == param");
		query.setOrdering("id asc");
		query.declareParameters("String param");
		List<Usuario> list = (List<Usuario>) query.execute(usuario.getLogin());
		for (Usuario us : list) {
			resultado = us;
		}
		return resultado;
	}

	@Override
	public Usuario grabaUsuario(@Valid Usuario obj) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Usuario obj2 = null;
		try {
			obj2 = pm.makePersistent(obj);
		} finally {
			pm.close();
		}
		return obj2;
	}

	@Override
	public Usuario insertaUsuario(@Valid Usuario obj) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Usuario obj2 = null;
		try {
			obj2 = pm.makePersistent(obj);
		} finally {
			pm.close();
		}
		return obj2;
	}

	@Override
	public Integer borrarUsuario(@Valid Usuario obj) {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Integer val = 0;
		try {
			pm.deletePersistent(obj);
			val = 1;
		} finally {
			pm.close();
		}
		return val;
	}
}
